/* Universidad del Valle de Guatemala
 * ListFactory.java
 * Mariana Castillo, 12374
 * Julio Maldonado, 12377
 * Seccion 30, Algoritmos y Estructura de Datos
 * Fecha: 03/07/13
 * Patrones de diseno Factory y Singleton para poder elegir la implementacion en tiempo de ejecucion y solo instanciar un objeto*
 */

package hojat4;
public class ListFactory<E> {
    
    //Se utiliza el patron de diseno singleton para controlar la creacion de mas de 1 objeto en la ejecucion
    private static ListFactory INSTANCE= null;
    
    // Se privatiza el contructor para que no puede ser llamado desde otro lugar
    private ListFactory() {
    }
    
    public static ListFactory getInstance(){
        if(INSTANCE==null){
            INSTANCE= new ListFactory();
        }
        return INSTANCE;
    }
    //selecciona el tipo de lista a utilizar basado en el patron Factory
	public AbstractList<E> getList(String entry){
		if (entry.equals("SL")){//regresa una lista simple
                        System.out.println("\nSINGLY LINKED LIST");
			return new SinglyLinkedList<E>();
		}
		else if (entry.equals("DL")){//regresa una lista doble
                        System.out.println("\nDOUBLY LINKED LIST");
			return new DoublyLinkedList<E>();
		}
		else{//regresa una lista circular
                        System.out.println("\nCIRCULAR LIST");
			return new CircularList<E>();
		}
	}
    
}
